home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Scene 96
/
Scene 96 International Edition (Zyklop Software) (Disc 1) (1997).iso
/
intros
/
64k
/
revolt
/
sources
/
rotatem.as3
< prev
next >
Wrap
Text File
|
1995-12-26
|
4KB
|
184 lines
; matrix-rotations with 6 muls...mem rulez=only sin table!
; by Warlock/AMNESTY...
jumps
.386p
CODE32 SEGMENT PARA PUBLIC USE32
ASSUME cs:CODE32, ds:CODE32
PUBLIC angleX
PUBLIC angleY
PUBLIC angleZ
PUBLIC _rotatem
PUBLIC sin
angleX dd 0
angleY dd 0
angleZ dd 0
_rotatem:
mov eax,angleX
and eax,0ffh
movsx ebx, word ptr [sin+eax*2]
mov sin1,ebx
add eax,64
and eax,0ffh
movsx ebx, word ptr [sin+eax*2]
mov cos1,ebx
mov eax,angleY
and eax,0ffh
movsx ebx, word ptr [sin+eax*2]
mov sin2,ebx
add eax,64
and eax,0ffh
movsx ebx, word ptr [sin+eax*2]
mov cos2,ebx
mov eax,angleZ
and eax,0ffh
movsx ebx, word ptr [sin+eax*2]
mov sin3,ebx
add eax,64
and eax,0ffh
movsx ebx, word ptr [sin+eax*2]
mov cos3,ebx
mov eax,cos3
imul dword ptr [cos2]
shrd eax,edx,10
mov dword ptr [matrix],eax
mov eax,sin2
neg eax
mov dword ptr [matrix+24],eax
mov eax,sin3
imul dword ptr [cos2]
shrd eax,edx,10
mov dword ptr [matrix+12],eax
mov eax,sin3
imul dword ptr [cos1]
shrd eax,edx,10
mov s3c1,eax
mov eax,sin3
imul dword ptr [sin1]
shrd eax,edx,10
mov s3s1,eax
mov eax,cos3
imul dword ptr [sin2]
shrd eax,edx,10
mov c3s2,eax
imul dword ptr [sin1]
shrd eax,edx,10
neg eax
sub eax,s3c1
mov dword ptr [matrix+4],eax
mov eax,c3s2
imul dword ptr [cos1]
shrd eax,edx,10
sub eax,s3s1
mov dword ptr [matrix+8],eax
mov eax,s3s1
imul dword ptr [sin2]
shrd eax,edx,10
mov ebx,eax
mov eax,cos3
imul dword ptr [cos1]
shrd eax,edx,10
sub eax,ebx
mov dword ptr [matrix+16],eax
mov eax,cos2
imul dword ptr [sin1]
shrd eax,edx,10
neg eax
mov dword ptr [matrix+28],eax
mov eax,cos2
imul dword ptr [cos1]
shrd eax,edx,10
mov dword ptr [matrix+32],eax
mov eax,s3c1
imul dword ptr [sin2]
shrd eax,edx,10
mov ebx,eax
mov eax,cos3
imul dword ptr [sin1]
shrd eax,edx,10
add eax,ebx
mov dword ptr [matrix+20],eax
mov eax,dword ptr [matrix]
imul dword ptr [matrix+4]
mov ab1,eax
mov eax,dword ptr [matrix+12]
imul eax,dword ptr [matrix+16]
mov ab2,eax
mov eax,dword ptr [matrix+24]
imul dword ptr [matrix+28]
mov ab3,eax
rotloop:
movsx eax,word ptr [esi]
movsx ebx,word ptr [esi+2]
imul ebx
mov xy,eax ;next constant:) per 3d-point!
movsx eax, word ptr [esi]
movsx ebx, word ptr [esi+2]
add eax,dword ptr [matrix+4]
add ebx,dword ptr [matrix]
imul ebx
sub eax,xy
sub eax,ab1
sar eax,10
mov ebx,eax
movsx eax,word ptr [esi+4]
imul eax,dword ptr [matrix+8]
sar eax,10
add ebx,eax ;==>xr
movsx eax, word ptr [esi]
movsx ebp, word ptr [esi+2]
add eax,dword ptr [matrix+16]
add ebp,dword ptr [matrix+12]
imul ebp
sub eax,xy
sub eax,ab2
sar eax,10
mov ebp,eax
movsx eax,word ptr [esi+4]
imul eax,dword ptr [matrix+20]
sar eax,10
add ebp,eax ;==>yr
movsx eax, word ptr [esi]
movsx edi, word ptr [esi+2]
add eax,dword ptr [matrix+28]
add edi,dword ptr [matrix+24]
imul edi
sub eax,xy
sub eax,ab3
sar eax,10
mov edi,eax
movsx eax,word ptr [esi+4]
imul eax,dword ptr [matrix+32]
sar eax,10
add edi,eax ;==>zr
mov word ptr [esi],bx
mov word ptr [esi+2],bp
mov word ptr [esi+4],di
add esi,6
loop rotloop
ret
include sin.255
matrix:
dd 9 DUP (?) ; c3c2 -s3c1-c3s2s1 -s3s1+c3s2c1
; s3c2 c3c1-s3s2s1 c3s1+s3s2c1
; -s2 -c2s1 c2c1
xy dd ?
s3c1 dd ?
c3s2 dd ?
s3s1 dd ?
IRPC roxi,<123>
sin&roxi dd ?
cos&roxi dd ?
ab&roxi dd ?
ENDM
CODE32 ENDS
END